package com.vben.system.biz.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vben.system.api.dto.user.*;
import com.vben.system.api.entity.SysUser;
import com.vben.system.api.vo.loginLog.SysUserLoginLogVO;
import com.vben.system.api.vo.user.SysUserVO;

import java.util.List;

/**
 * @author sunn
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 分页查询用户
     *
     * @param param 分页参数
     * @return 分页结果
     */
    Page<SysUser> pageVO(SysUserPageDTO param);

    /**
     * 获取登陆用户信息
     *
     * @return 登陆用户信息
     */
    SysUserVO getLoginUserInfo();

    /**
     * 获取用户详细信息
     *
     * @param userId 用户id
     * @return 用户信息
     */
    SysUserVO detail(Long userId);

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getUserByUsername(String username);

    /**
     * 根据手机号查询用户
     *
     * @param phone 手机号
     * @return 用户信息
     */
    SysUser getUserByPhone(String phone);

    /**
     * 根据用户id获取权限列表
     *
     * @param userId 用户id
     * @return 用户id对应的权限列表
     */
    List<String> getUserPermissionList(Long userId);

    /**
     * 根据用户id获取角色列表
     *
     * @param userId 用户id
     * @return 用户id对应的角色列表
     */
    List<String> getUserRoleList(Long userId);

    /**
     * 根据用户id获取用户角色名称列表
     *
     * @param loginUserId 用户id
     * @return 用户id对应的角色名称列表
     */
    List<String> getUserRoleNameList(long loginUserId);

    /**
     * 新增用户
     *
     * @param user 用户信息
     * @return 新增结果
     */
    Long addUser(SysUser user);

    /**
     * 更新用户
     *
     * @param user 用户信息
     * @return 更新结果
     */
    Boolean updateLoginUserInfo(SysUser user);

    /**
     * 修改登陆用户密码
     *
     * @param updatePasswordDTO 密码信息
     * @return 修改结果
     */
    Boolean updatePassword(SysUserUpdatePasswordDTO updatePasswordDTO);

    /**
     * 重置密码
     *
     * @param resetPasswordDTO 重置密码信息
     * @return 重置结果
     */
    Boolean resetPassword(SysUserResetPasswordDTO resetPasswordDTO);

    /**
     * 获取用户在线设备列表
     *
     * @return 在线设备信息
     */
    List<SysUserLoginLogVO> getOnlineDevice();

    /**
     * 踢用户下线
     *
     * @param loginId 登陆id
     * @return 操作结果
     */
    Boolean kickoutByLoginId(KickoutDTO loginId);

    /**
     * 锁定用户
     *
     * @param userIds 用户id列表
     * @return 操作结果
     */
    Boolean locked(SysUserLockedDTO sysUserLockedDTO);

    /**
     * 解锁用户
     *
     * @param sysUserLockedDTO 用户id列表
     * @return 操作结果
     */
    Boolean unlocked(SysUserLockedDTO sysUserLockedDTO);

    /**
     * 用户信息转换
     *
     * @param user 用户信息
     * @return 用户信息
     */
    SysUserVO toVO(SysUser user);

    /**
     * 删除用户
     *
     * @param sysUserDeleteDTO 用户id列表
     * @return 操作结果
     */
    Boolean delete(SysUserDeleteDTO sysUserDeleteDTO);
}
